package com.zhu.solution.arrayQuestion;

import java.util.Arrays;

//给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
//
//不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
//
public class Solution_1 {

    public static void main(String[] args) {

        int[] nums = {0,0,1,1,1,2,2,3,3,4};

        System.out.println(new Solution_1().removeDuplicates_3(nums) +"\n"+
                Arrays.toString(nums));


    }

    public int removeDuplicates(int[] nums) {
        int length = nums.length;
        for(int i = 0;i < length-2;i++){
            if (nums[i] != nums[i+1]){
                continue;
            }
            while(nums[i] == nums[i+1]){
                for (int j = i+1; j < length-1;j++){
                    nums[j] = nums[j+1];
                }
                length--;
            }
        }
        return length;
    }

    public int removeDuplicates_2(int[] nums) {
        int length = 0;
        for(int i = 0;i < nums.length;i++){
            if (nums[length] != nums[i]){
                length++;
                nums[length] = nums[i];
            }
        }
        return length+1;
    }

    public int removeDuplicates_3(int[] nums) {
        int n = nums.length;
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }

}
